﻿using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Text;
using System.Windows.Forms;
using System2012.Persona;
using DevExpress.XtraGrid.Views.Grid;
using LayerData.Persona;
using LayerEntity.Almacen;
using LayerEntity.Persona ;
using LayerEntity.Persona.Clientes;
using LayerEntity.Producto;
using LayerEntity.Sistema;
using DevExpress.XtraEditors;
using LayerEntity.Ventas;
using LayerLogic;
using LayerEntity.Caja;
using System.Collections.Generic;
using System2012.Sistema.Documentos;
using DevExpress.XtraPrinting;
using DevExpress.XtraPrinting.Preview;
using System2012.Reportes;
using DevExpress.XtraReports.UI;
using System.IO;
using DevExpress.XtraReports.UserDesigner;
using LayerEntity.Creditos;

namespace System2012.Ventas
{
    public partial class frmFacturacion : DevExpress.XtraEditors.XtraForm
    {
        public frmFacturacion()
        {
            this.InitializeComponent();
            this.RecControles(this);
            Habilitar(false);
            cmbDocumento.Focus();
            HabilitaButtons(false, false);
        }

        #region varibles
        DataTable TblDetalle = new DataTable("Detalle");
        int indexRow;
        GUtil util = new GUtil();
        int op_det;
        /// <summary>
        /// Indica si estamos editanado o creando uno Nuevo
        /// 0: Nuevo Documento
        /// 1: Editando y Guardando
        /// </summary>
        int operacion = 0;
        /// <summary>
        /// id_Dicliente almacen la clave principal de la direccion del cliente
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        int id_Dicliente;
        /// <summary>
        /// DatVisor ArrayList almacen la informacion que se envia al visor de ventas al momento de 
        /// efectuar el pago de la venta 
        /// se icializa al monto de precionar la tecla nuevo que limpa todo el formulario de ventas
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        ArrayList DatVisor;
        // GUtil util = new GUtil();
        /// <summary>
        /// idIgv almacena el id del Igv que esta recuperandose para ser grabado en el comprobante de pago
        /// </summary>
        int IdIgv;
        /// <summary>
        /// almacen el id del tipo de cambio actual
        /// </summary>
        int IdTc;
        /// <summary>
        /// plantilla:recupera la ruta de la plantilla del comprobante que se esta ejecutando
        /// </summary>
        string PLANTILLA;
        /// <summary>
        /// impresora : recupera el nombre de la impresora a la que va ha ser enviado a imprimirse el docmuento
        /// </summary>
        string IMPRESORA;
        #region OPERACIONES FORMULARIO
        private void NuevoDocumento()
        {
            this.InabilitColumns(true);
            this.gridView1.FocusedRowHandle = this.TblDetalle.Rows.Count - 1;
            this.gridView1.FocusedColumn = this.gridView1.Columns["Item"];
            txtSerie.Focus();
            //this.gridView1.ShowEditor();
            this.util.RecControles(this);
            this.TblDetalle.Clear();
            cmbDocumento.Focus();
            Habilitar(true);
            util.Habilitar(this, true);
            if (!this.BGWTipDoc.IsBusy)
            {
                this.BGWTipDoc.RunWorkerAsync();
            }
            cmbDocumento.Focus();
            txtFecha.EditValue = DateTime.Now.Date;
            GetTipoCambio();
            HabilitaButtons(true, false);
        }

        private void Habilitar(bool est)
        {
            util.Habilitar(this, est);
            cmbDocumento.Focus();
        }

        private void InabilitColumns(bool est)
        {
            gCCodigo.OptionsColumn.AllowEdit = est;
            gCLote.OptionsColumn.AllowEdit = est;
            gcAlmacen.OptionsColumn.AllowEdit = est;
        }

        private void HabilitaButtons(bool newReg, bool edita)
        {
            this.btnGrabar.Enabled = newReg;
            this.btnImprimir.Enabled = edita;
            btnAnular.Enabled = edita;
            btnExportar.Enabled = edita;
        }

        private void GetTipoCambio()
        {
            List<ETipoCambio> objEtc = System2012.SystemUtils.RecordManagerCommonList.GetTipoCambio(0);
            if (objEtc.Count > 0)
            {
                txtTipCambio.Text = objEtc[0].Imp_Venta.ToString();
                IdTc = objEtc[0].Id_Tipocambio;
            }
        }

        private void GetIgv()
        {
            List<EIgv> obj = System2012.SystemUtils.RecordManagerCommonList.GetIgv(0);
            if (obj.Count > 0)
            {
                if (cmbOperacion.EditValue != null)
                {
                    if (cmbOperacion.EditValue.ToString() == "01")
                    {
                        txtIgv.Text = obj[0].Imp_Igv.ToString();
                        this.IdIgv = obj[0].Id_Igv;
                    }
                    else
                    {
                        txtIgv.Text = "0.0";
                        this.IdIgv = obj[0].Id_Igv;
                    }
                }
            }
        }

        #endregion

        #endregion
        #region DESPLAZAMIENTOS
        private void PresionadoTeclas(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Down)
            {
                if (sender == this.txtSerie)
                {
                    this.txtNroComprobante.Focus();
                    this.txtNroComprobante.SelectAll();
                }
                if (sender == this.txtNroComprobante)
                {
                    this.txtFecha.Focus();
                    this.txtFecha.SelectAll();
                }
                /* if (sender == this.txtNroComprobante)
                {
                this.txtSerieRef.Focus();
                this.txtSerieRef.SelectAll();
                }
                if (sender == this.txtSerieRef)
                {
                this.txtNroComprobanteRef.Focus();
                this.txtNroComprobanteRef.SelectAll();
                }
                if (sender == this.txtNroComprobanteRef)
                {
                this.txtFecha.Focus();
                this.txtFecha.SelectAll();
                }*/
                /* if (sender == this.txtFecha)
                {
                this.cmbMoneda.Focus();
                this.cmbMoneda.SelectAll();
                }*/
                if (sender == this.txtFecha)
                {
                    this.txtIdCliente.Focus();
                    this.txtIdCliente.SelectAll();
                }
                if (sender == this.txtIdCliente)
                {
                    if (string.IsNullOrEmpty(txtIdCliente.Text))
                    {
                        this.txtCliente.Focus();
                        this.txtCliente.SelectAll();
                    }
                    else
                    {
                        cmbTipVenta.Focus();
                    }
                }
                if (sender == this.txtCliente)
                {
                    this.txtDocCliente.Focus();
                    this.txtDocCliente.SelectAll();
                }
                if (sender == this.txtDocCliente)
                {
                    this.txtIdUbigeo.Focus();
                    this.txtIdUbigeo.SelectAll();
                }
                if (sender == this.txtIdUbigeo)
                {
                    this.txtDireccion.Focus();
                    this.txtDireccion.SelectAll();
                }
                if (sender == this.txtDireccion)
                {
                    this.txtLineaCredito.Focus();
                    this.txtLineaCredito.SelectAll();
                }
                if (sender == this.txtLineaCredito)
                {
                    this.cmbTipVenta.Focus();
                    this.cmbTipVenta.SelectAll();
                }

                if (sender == this.txtIdVendedor)
                {
                    this.cmbOperacion.Focus();
                    this.cmbOperacion.SelectAll();
                }
                
                if (sender == this.chkGenMov)
                {
                    this.txtGlosa.Focus();
                    this.txtGlosa.SelectAll();
                }
                if (sender == this.txtGlosa)
                {
                    if (TblDetalle.Rows.Count > 0)
                    {
                        gridView1.Focus();
                        this.gridView1.FocusedRowHandle = this.TblDetalle.Rows.Count - 1;
                        this.gridView1.FocusedColumn = this.gridView1.Columns["Codigo"];
                        this.gridView1.ShowEditor();
                    }
                    else
                    {
                        this.AddDetalle();
                    }
                }
            }
            if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Right)
            {
                if (sender == this.cmbDocumento)
                {
                    this.txtSerie.Focus();
                    this.txtSerie.SelectAll();
                }
                if (sender == this.cmbMoneda)
                {
                    this.txtIdCliente.Focus();
                    this.txtIdCliente.SelectAll();
                }
                if (sender == this.cmbTipVenta)
                {
                    this.cmbFormaPago.Focus();
                    this.cmbFormaPago.SelectAll();
                }
                if (sender == this.cmbFormaPago)
                {
                    this.txtIdVendedor.Focus();
                    this.txtIdVendedor.SelectAll();
                }
                if (sender == this.cmbOperacion)
                {
                    this.txtGlosa.Focus();
                    txtGlosa.SelectAll();
                    //this.chkGenMov.Focus();
                    // this.chkGenMov.SelectAll();
                }
            }
            if (e.KeyCode == Keys.Up)
            {
                if (sender == this.txtSerie)
                {
                    this.cmbDocumento.Focus();
                    this.cmbDocumento.SelectAll();
                }
                if (sender == this.txtNroComprobante)
                {
                    this.txtSerie.Focus();
                    this.txtSerie.SelectAll();
                }
                if (sender == this.txtSerieRef)
                {
                    this.txtNroComprobante.Focus();
                    this.txtNroComprobante.SelectAll();
                }
                if (sender == this.txtNroComprobanteRef)
                {
                    this.txtSerieRef.Focus();
                    this.txtSerieRef.SelectAll();
                }
                if (sender == this.txtFecha)
                {
                    this.txtNroComprobanteRef.Focus();
                    this.txtNroComprobanteRef.SelectAll();
                }

                if (sender == this.txtIdCliente)
                {
                    this.cmbMoneda.Focus();
                    this.cmbMoneda.SelectAll();
                }
                if (sender == this.txtCliente)
                {
                    this.txtIdCliente.Focus();
                    this.txtIdCliente.SelectAll();
                }
                if (sender == this.txtDocCliente)
                {
                    this.txtCliente.Focus();
                    this.txtCliente.SelectAll();
                }
                if (sender == this.txtIdUbigeo)
                {
                    this.txtDocCliente.Focus();
                    this.txtDocCliente.SelectAll();
                }
                if (sender == this.txtDireccion)
                {
                    this.txtIdUbigeo.Focus();
                    this.txtIdUbigeo.SelectAll();
                }
                if (sender == this.txtLineaCredito)
                {
                    this.txtDireccion.Focus();
                    this.txtDireccion.SelectAll();
                }

                if (sender == this.txtIdVendedor)
                {
                    this.cmbFormaPago.Focus();
                    this.cmbFormaPago.SelectAll();
                }

                if (sender == this.txtVendedor)
                {
                    this.txtIdVendedor.Focus();
                    this.txtIdVendedor.SelectAll();
                }
                
                if (sender == this.chkGenMov)
                {
                    this.cmbOperacion.Focus();
                    this.cmbOperacion.SelectAll();
                }
                if (sender == this.txtIgv)
                {
                    this.cmbOperacion.Focus();
                    this.cmbOperacion.SelectAll();
                }
                if (sender == this.txtGlosa)
                {
                    this.chkGenMov.Focus();
                    this.chkGenMov.SelectAll();
                }
            }
            if (e.KeyCode == Keys.Left)
            {
                if (sender == this.cmbMoneda)
                {
                    this.txtFecha.Focus();
                    this.txtFecha.SelectAll();
                }
                if (sender == this.cmbTipVenta)
                {
                    this.txtLineaCredito.Focus();
                    this.txtLineaCredito.SelectAll();
                }
                if (sender == this.cmbFormaPago)
                {
                    this.cmbTipVenta.Focus();
                    this.cmbTipVenta.SelectAll();
                }
                if (sender == this.cmbOperacion)
                {
                    this.txtIdVendedor.Focus();
                    this.txtIdVendedor.SelectAll();
                }
            }
        }

        public void RecControles(Control control)
        {
            foreach (Control contHijo in control.Controls)
            {
                if (contHijo.HasChildren)
                {
                    this.RecControles(contHijo);
                }
                contHijo.KeyDown += new KeyEventHandler(PresionadoTeclas);
            }
        }

        #endregion

        #region DetalleFacturacion
       
        private void AddLinea()
        {
            DataRow r;
            r = this.TblDetalle.NewRow();
            //  r["Item"] = item;
            r["Codigo"] = "";
            r["Lote"] = "";
            r["Alm"] = 1;
            r["Descripcion"] = "";
            r["Und"] = "";
            r["Stock"] = 0.0;
            r["Cantidad"] = 0;
            r["Lista"] = 1;
            r["Precio"] = 0.0;
            r["Dscto"] = 0.0;
            r["Subtotal"] = 0.0;
            r["IGV"] = 0.0;
            r["Total"] = 0.0;
            r["porcent_IGV"] = 0;
            r["val_unidad"] = 1;
            r["val_min"] = 1;
            r["id_precios"] = DBNull.Value;
            r["id_unidad"] = DBNull.Value;
            r["id_lista"] = DBNull.Value;
            r["inc_serie"] = "N";
            r["controla_stock"] = "S";
            r["st"] = 1;
            this.TblDetalle.Rows.Add(r);
        }

        private void CabeceraDetalle()
        {
            DataColumn item;

            item = new DataColumn();
            item.DataType = System.Type.GetType("System.String");
            item.ColumnName = "Item";
            item.ReadOnly = true;
            item.Unique = true;
            item.AutoIncrement = true;
            item.AutoIncrementStep = 1;
            item.AutoIncrementSeed = 1;
            this.TblDetalle.Columns.Add(item);

            //   TblDetalle.Columns.Add(new DataColumn("Item", typeof(string)));
            this.TblDetalle.Columns.Add(new DataColumn("Codigo", typeof(string)));
            this.TblDetalle.Columns.Add(new DataColumn("Lote", typeof(string)));
            this.TblDetalle.Columns.Add(new DataColumn("Alm", typeof(int)));
            this.TblDetalle.Columns.Add(new DataColumn("Descripcion", typeof(string)));
            this.TblDetalle.Columns.Add(new DataColumn("Und", typeof(string)));
            this.TblDetalle.Columns.Add(new DataColumn("Stock", typeof(double)));
            this.TblDetalle.Columns.Add(new DataColumn("Cantidad", typeof(double)));
            this.TblDetalle.Columns.Add(new DataColumn("Lista", typeof(int)));
            this.TblDetalle.Columns.Add(new DataColumn("Precio", typeof(double)));
            this.TblDetalle.Columns.Add(new DataColumn("Dscto", typeof(double)));
            this.TblDetalle.Columns.Add(new DataColumn("Subtotal", typeof(decimal)));
            this.TblDetalle.Columns.Add(new DataColumn("IGV", typeof(decimal)));
            this.TblDetalle.Columns.Add(new DataColumn("Total", typeof(decimal)));
            this.TblDetalle.Columns.Add(new DataColumn("porcent_IGV", typeof(decimal)));
            this.TblDetalle.Columns.Add(new DataColumn("Imp_Bruto", typeof(decimal)));
            //varible de ayuda 
            this.TblDetalle.Columns.Add(new DataColumn("id_precios", typeof(int)));
            this.TblDetalle.Columns.Add(new DataColumn("id_unidad", typeof(int)));
            this.TblDetalle.Columns.Add(new DataColumn("id_lista", typeof(int)));
            this.TblDetalle.Columns.Add(new DataColumn("inc_serie", typeof(string)));
            this.TblDetalle.Columns.Add(new DataColumn("cant_edita", typeof(decimal)));
            this.TblDetalle.Columns.Add(new DataColumn("controla_stock", typeof(string)));
            this.TblDetalle.Columns.Add(new DataColumn("costo_alm", typeof(decimal)));
            this.TblDetalle.Columns.Add(new DataColumn("puntos", typeof(int)));
            this.TblDetalle.Columns.Add(new DataColumn("val_unidad", typeof(decimal)));
            this.TblDetalle.Columns.Add(new DataColumn("val_min", typeof(decimal)));
            this.TblDetalle.Columns.Add(new DataColumn("st", typeof(string)));
        }

        static int item = 1;
        private void AddDetalle()
        {
            this.op_det = 0;
            Listados.frmBusquedaProductos f = new Listados.frmBusquedaProductos();
            f.Opcion = 2;
            f.ShowDialog();
            if (f.data != null)
            {
                if (f.data.Count > 0)
                {
                    if (f.data[0] != null)
                    {
                        DataRow r;
                        r = this.TblDetalle.NewRow();
                        //  r["Item"] = item;
                        r["Codigo"] = f.data[0].ToString();
                        r["Lote"] = "1";
                        r["Alm"] = 1;
                        r["Descripcion"] = f.data[1].ToString();
                        r["Und"] = f.data[11].ToString();
                        r["Stock"] = f.data[7].ToString();
                        r["Cantidad"] = 1;
                        r["Lista"] = 1;
                        r["Precio"] = 0;
                        r["Dscto"] = 0.0;
                        r["Subtotal"] = 0.0;
                        r["IGV"] = 0.0;
                        r["Total"] = 0.0;
                        r["porcent_IGV"] = f.data[5].ToString();
                        r["val_unidad"] = f.data[17].ToString();
                        r["val_min"] = f.data[18].ToString();
                        r["id_precios"] = f.data[10].ToString();
                        r["id_unidad"] = f.data[8].ToString();
                        r["id_lista"] = f.data[9].ToString();
                        r["inc_serie"] = f.data[3].ToString();
                        r["puntos"] = 0;
                        r["controla_stock"] = f.data[6].ToString();
                        r["st"] = 1;
                        this.TblDetalle.Rows.Add(r);
                        //  this.gridControl1.DataSource = this.TblDetalle;
                        this.gridControl1.Focus();
                        this.gridView1.FocusedRowHandle = this.TblDetalle.Rows.Count - 1;
                        this.gridView1.FocusedColumn = this.gridView1.Columns["Cantidad"];
                        this.gridView1.ShowEditor();
                        //  gridView1.Columns[0].
                    }
                }
            }
            item = item + 1;
        }

        private void AgregarDatosLista(object sender, int row)
        {
            this.op_det = 0;
            GridView view = sender as GridView;
            Listados.frmBusquedaProductos f = new Listados.frmBusquedaProductos();
            f.Opcion = 2;
            f.ShowDialog();
            if (f.data != null)
            {
                if (f.data.Count > 0)
                {
                    if (f.data[0] != null)
                    {
                        item = item + 1;
                        view.SetRowCellValue(row, "Item", item);
                        view.SetRowCellValue(row, "Codigo", f.data[0].ToString());
                        view.SetRowCellValue(row, "Alm", 1);
                        view.SetRowCellValue(row, "Descripcion", f.data[1].ToString());
                        view.SetRowCellValue(row, "Und", f.data[11].ToString());
                        view.SetRowCellValue(row, "Stock", f.data[7].ToString());
                        view.SetRowCellValue(row, "Cantidad", 1);
                        view.SetRowCellValue(row, "Lista", 1);
                        view.SetRowCellValue(row, "Precio", 0.00);
                        view.SetRowCellValue(row, "Dscto", 0.00);
                        view.SetRowCellValue(row, "Subtotal", 0);
                        view.SetRowCellValue(row, "IGV", 0.00);
                        view.SetRowCellValue(row, "Total", 0.00);
                        view.SetRowCellValue(row, "porcent_IGV", 0);
                        view.SetRowCellValue(row, "val_unidad", f.data[17].ToString());
                        view.SetRowCellValue(row, "val_min", f.data[18].ToString());
                        view.SetRowCellValue(row, "id_precios", f.data[10]);
                        view.SetRowCellValue(row, "id_unidad", f.data[8]);
                        view.SetRowCellValue(row, "id_lista", f.data[9]);
                        view.SetRowCellValue(row, "inc_serie", f.data[3]);
                        view.SetRowCellValue(row, "controla_stock", f.data[6]);
                        view.SetRowCellValue(row, "st", 1);
                    }
                }
            }
        }

        private void AgregarAlmacen(object sender, int row)
        {
            Listados.frmListarAlmacen f = new System2012.Listados.frmListarAlmacen();
            f.ShowDialog();
            GridView view = sender as GridView;
            if (f.data != null)
            {
                if (f.data.Count > 0)
                {
                    if (f.data[0] != null)
                    {
                        view.SetRowCellValue(row, "Alm", f.data[0]);
                    }
                }
            }
        }

        private void CalCularPrecios(object sender, int row)
        {
            GridView view = sender as GridView;
            this.util = new GUtil();
            if (this.chkDesc.Checked)
            {
                this.util.Op_dscto = 1;
            }
            else
            {
                this.util.Op_dscto = 2;
            }
            if (this.op_det == 1)
            {
                double precio = view.GetRowCellValue(row, "Precio").ToString().Length > 0 ? double.Parse(view.GetRowCellValue(row, "Precio").ToString()) : 0;
                double cant = view.GetRowCellValue(row, "Cantidad").ToString().Length > 0 ? double.Parse(view.GetRowCellValue(row, "Cantidad").ToString()) : 0;
                double dsto = view.GetRowCellValue(row, "Dscto").ToString().Length > 0 ? double.Parse(view.GetRowCellValue(row, "Dscto").ToString()) : 0;

                this.util.Precio = precio;
                this.util.Cantidad = cant;
                this.util.Descuento = dsto;
                this.util.Porcent_igv = 18;
                
                view.SetRowCellValue(row, "Subtotal", this.util.getSubTotal());
                view.SetRowCellValue(row, "IGV", this.util.getValIgv());
                view.SetRowCellValue(row, "Total", this.util.getTotal());
                view.SetRowCellValue(row, "Imp_Bruto", this.util.getImporteBruto());
            }
            if (this.op_det == 2)
            {
                double Total = double.Parse(view.GetRowCellValue(row, "Total").ToString());
                double cant = double.Parse(view.GetRowCellValue(row, "Cantidad").ToString());
                double dsto = double.Parse(view.GetRowCellValue(row, "Dscto").ToString());

                this.util.Total = Total ;
                this.util.Cantidad = cant;
                this.util.Descuento = dsto;
                this.util.Porcent_igv = 18;
                view.SetRowCellValue(row, "Precio", this.util.getValPrecio());
                this.util.Precio = double.Parse(this.util.getValPrecio());
                view.SetRowCellValue(row, "Subtotal", this.util.getSubTotal());
                view.SetRowCellValue(row, "IGV", this.util.getValIgv());
                //view.SetRowCellValue(row, "Total", util.getTotal());
                view.SetRowCellValue(row, "Imp_Bruto", this.util.getImporteBruto());
            }
            this.CalCularTotales();
        }

        private void CalCularTotales()
        {
            /*double valor_subtotal = 0;
            double val_igv = 0;
            double val_total = 0;
            double val_bruto = 0;
            double val_dcsto = 0;
            for (int i = 0; i < this.TblDetalle.Rows.Count; i++)
            {
                valor_subtotal += TblDetalle.Rows[i]["Subtotal"].ToString().Length > 0 ? double.Parse(this.TblDetalle.Rows[i]["Subtotal"].ToString()) : 0;
                val_igv += TblDetalle.Rows[i]["IGV"].ToString().Length > 0 ? double.Parse(this.TblDetalle.Rows[i]["IGV"].ToString()) : 0;
                val_total += TblDetalle.Rows[i]["Total"].ToString().Length > 0 ? double.Parse(this.TblDetalle.Rows[i]["Total"].ToString()) : 0;
                val_bruto += TblDetalle.Rows[i]["Imp_Bruto"].ToString().Length > 0 ? double.Parse(this.TblDetalle.Rows[i]["Imp_Bruto"].ToString()) : 0;
                val_dcsto += TblDetalle.Rows[i]["Dscto"].ToString().Length > 0 ? double.Parse(this.TblDetalle.Rows[i]["Dscto"].ToString()) : 0;
            }
            */
            this.txtValVenta.Text = TblDetalle.Compute("Sum(Subtotal)", string.Empty).ToString();//valor_subtotal.ToString();
            this.txtTotDsto.Text = TblDetalle.Compute("Sum(Dscto)", string.Empty).ToString(); //val_dcsto.ToString();
            this.txtValIgv.Text = TblDetalle.Compute("Sum(IGV)", string.Empty).ToString(); //val_igv.ToString();
            this.txtImpBruto.Text = TblDetalle.Compute("Sum(Imp_Bruto)", string.Empty).ToString(); //val_bruto.ToString();
            this.txtTotal.Text = TblDetalle.Compute("Sum(Total)", string.Empty).ToString(); //val_total.ToString();
        }

        private void QuitarItem()
        {
            if (this.TblDetalle.Rows.Count > 0)
            {
                if (this.indexRow >= 0)
                {
                    DataView dv = new DataView();
                    dv.Table = this.TblDetalle;
                    dv.RowFilter = string.Format("Item={0}", this.TblDetalle.Rows[this.indexRow]["Item"]);// DgvLista["Item", DgvLista.CurrentCell.RowIndex].Value;
                    for (int i = 0; i <= dv.Count - 1; i++)
                    {
                        dv.Delete(i);
                    }
                }
                else
                {
                    XtraMessageBox.Show(this, "SELECIONE UN PRODUCTO  DE LA LISTA \n QUE DESEA ELIMINAR", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                XtraMessageBox.Show(this, "NO EXISTE NINGUN REGISTROS  ", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        #endregion
        #region Validaciones Del Detalle
        private bool validaCodigoProducto(string codigo)
        {
            bool res = false;
            EProducto obj = new EProducto();
            obj.descripcion = string.Format("where id_producto= '{0}'", codigo);
            DataTable dtbProd = SystemUtils.RecodManajerproducto.GetListaProductos(obj);
            if (dtbProd.Rows.Count > 0)
            {
                res = true;
            }
            return res;
        }

        private bool ValidaAlmacen(string alm, string idprod)
        {
            bool res = false;
            EAlmacen objAl = new EAlmacen();
            StringBuilder cadena = new StringBuilder();
            cadena.AppendFormat("where id_almacen={0}", alm);
            cadena.Append(" and id_producto='");
            cadena.AppendFormat("{0}'", idprod);
            objAl.Condicion = cadena.ToString();
            DataTable dtbAlm = System2012.SystemUtils.RecordmanagerAlmacen.GetListaStockAlamcen(objAl);
            if (dtbAlm.Rows.Count > 0)
            {
                this.gridView1.SetRowCellValue(this.indexRow, "Stock", dtbAlm.Rows[0]["saldos"]);
                res = true;
            }
            return res;
        }

        private bool ValidarProductoManegaSeries(string Codigo)
        {
            bool res = false;
            EProducto obj = new EProducto();
            StringBuilder cadena = new StringBuilder();
            cadena.Append("where id_producto='");
            cadena.AppendFormat("{0}'", Codigo);
            cadena.Append("and inc_serie='S'");
            obj.descripcion = cadena.ToString();
            DataTable dtbProd = SystemUtils.RecodManajerproducto.GetListaProductos(obj);
            if (dtbProd.Rows.Count > 0)
            {
                res = true;
            }

            return res;
        }

        private void SeccionarSerie(string Codigo)
        {
            if (this.ValidarProductoManegaSeries(Codigo))
            {
                frmSeriesVentas f = new frmSeriesVentas();
                f.ShowDialog();
            }
        }

        private double Stok(string alm, string idprod)
        {
            double val_stokc = 0;
            EAlmacen objAl = new EAlmacen();
            StringBuilder cadena = new StringBuilder();
            cadena.AppendFormat("where id_almacen={0}", alm);
            cadena.Append(" and id_producto='");
            cadena.AppendFormat("{0}'", idprod);
            objAl.Condicion = cadena.ToString();
            DataTable dtbAlm = System2012.SystemUtils.RecordmanagerAlmacen.GetListaStockAlamcen(objAl);
            if (dtbAlm.Rows.Count > 0)
            {
                val_stokc = double.Parse(dtbAlm.Rows[0]["saldos"].ToString());
                this.gridView1.SetRowCellValue(this.indexRow, "Stock", dtbAlm.Rows[0]["saldos"]);
            }
            return val_stokc;
        }

        private void getPrecios(int lista)
        {
            EPrecios obj = new EPrecios();
            if (this.gridView1.GetRowCellValue(this.indexRow, "Codigo") != null)
            {
                string idprod = this.gridView1.GetRowCellValue(this.indexRow, "Codigo").ToString();
                string idUnid = this.gridView1.GetRowCellValue(this.indexRow, "id_unidad").ToString();
                string idLista = this.gridView1.GetRowCellValue(this.indexRow, "id_lista").ToString();
                string idPrecio = this.gridView1.GetRowCellValue(this.indexRow, "id_precios").ToString();
                StringBuilder cadena = new StringBuilder();
                cadena.Append("where id_producto='");
                cadena.AppendFormat("{0}'", idprod);
                cadena.Append("and id_unidad=");
                cadena.AppendFormat("{0}", idUnid);
                cadena.Append("and id_lista=");
                cadena.AppendFormat("{0}", idLista);
                cadena.Append("and id_precios=");
                cadena.AppendFormat("{0}", idPrecio);
                Console.Write(string.Format("{0}\n", cadena));
                obj.Condicion = cadena.ToString(); //"where id_producto='" + idprod + "'";
                DataTable dtbLista = SystemUtils.RecodManajerproducto.GetListaPrecios(obj);
                if (dtbLista.Rows.Count > 0)
                {
                    switch (lista)
                    {
                        case 1:
                            this.gridView1.SetRowCellValue(this.indexRow, "Precio", dtbLista.Rows[0]["precio1"]);
                            break;
                        case 2:
                            this.gridView1.SetRowCellValue(this.indexRow, "Precio", dtbLista.Rows[0]["precio2"]);
                            break;
                        case 3:
                            this.gridView1.SetRowCellValue(this.indexRow, "Precio", dtbLista.Rows[0]["precio3"]);
                            break;
                        case 4:
                            this.gridView1.SetRowCellValue(this.indexRow, "Precio", dtbLista.Rows[0]["precio4"]);
                            break;
                        case 5:
                            this.gridView1.SetRowCellValue(this.indexRow, "Precio", dtbLista.Rows[0]["precio5"]);
                            break;
                        default:
                            XtraMessageBox.Show(this, "La lista no esta Activa", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            break;
                    }
                }
                else
                {
                    //  XtraMessageBox.Show(this, "SELECCIONE UN PRODUCTO PARA REALIZAR ESTE PROCESO", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    // gridView1.SetRowCellValue(indexRow, "Lista", 0);
                }
            }
            else
            {
                XtraMessageBox.Show(this, "SELECCIONE UN PRODUCTO PARA REALIZAR ESTE PROCESO", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        #endregion
        #region Validacion del Formulario
        private bool ValidarNroComprobante()
        {
            bool res = false;
            if (this.txtSerie.Text != string.Empty && this.txtNroComprobante.Text != string.Empty)
            {
                if (int.Parse(this.txtSerie.Text) == 0)
                {
                    res = false;
                    this.txtSerie.Focus();
                }
                else
                {
                    if (int.Parse(this.txtNroComprobante.Text) == 0)
                    {
                        res = false;
                        this.txtNroComprobante.Focus();
                    }
                    else
                    {
                        res = true;
                    }
                }
            }
            else
            {
                this.txtSerie.Focus();
                res = false;
            }
            return res;
        }

        private bool VerificarCantidadDetalle()
        {
            bool res = true;
            for (int i = 0; i < this.TblDetalle.Rows.Count; i++)
            {
                if (double.Parse(this.TblDetalle.Rows[i]["Cantidad"].ToString()) == 0.0)
                {
                    res = false;
                    this.gridControl1.Focus();
                    this.gridView1.FocusedRowHandle = i;
                    this.gridView1.FocusedColumn = this.gridView1.Columns["Cantidad"];
                    this.gridView1.ShowEditor();
                    break;
                }
            }
            return res;
        }

        private bool ValidForm()
        {
            bool res = false;
            if (cmbDocumento.ItemIndex == -1)
            {
                res = false;
                XtraMessageBox.Show(this, "NO HA SELECCIONADO NINGUN TIPO DE DOCUMENTO", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                cmbDocumento.Focus();
            }
            else
            {
                if (cmbMoneda.ItemIndex == -1)
                {
                    res = false;
                    XtraMessageBox.Show(this, "NO HA SELECCIONADO NINGUNA MONEDA DE VENTA", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    cmbMoneda.Focus();
                }
                else
                {
                    if (cmbTipVenta.ItemIndex == -1)
                    {
                        res = false;
                        XtraMessageBox.Show(this, "NO HA SELECCIONADO NINGUN TIPO DE VENTA", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        cmbTipVenta.Focus();
                    }
                    else
                    {
                        if (cmbFormaPago.ItemIndex == -1)
                        {
                            res = false;
                            XtraMessageBox.Show(this, "NO HA SELECCIONADO NINGUNA FORMA DE PAGO", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            cmbFormaPago.Focus();
                        }
                        else
                        {
                            if (cmbOperacion.ItemIndex == -1)
                            {
                                res = false;
                                XtraMessageBox.Show(this, "NO HA SELECCIONADO NINGUN TIPO DE OPERACION", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                cmbOperacion.Focus();
                            }
                            else
                            {
                                res = true;
                            }
                        }
                    }
                }
            }
            return res;
        }

        private bool ValidarDatos()
        {
            bool res = false;
            if (txtCliente.Text == string.Empty)
            {
                res = false;
                XtraMessageBox.Show(this, "Seleccione un cliente para poder efectuar la Venta", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                if (txtDocCliente.Text == string.Empty)
                {
                    res = false;
                    XtraMessageBox.Show(this, "Seleccione un cliente para poder efectuar la Venta", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    if (txtSerie.Text == string.Empty)
                    {
                        res = false;
                        XtraMessageBox.Show(this, "Ingrese la Serie del comprobante correctamente", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else
                    {
                        if (txtNroComprobante.Text == string.Empty)
                        {
                            res = false;
                            XtraMessageBox.Show(this, "Ingrese el Nro del Comprobante correctamente", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                        else
                        {
                            if (txtTotal.Text == string.Empty)
                            {
                                res = false;
                                XtraMessageBox.Show(this, "El importe total de la\n" +
                                                          "venta  no puede ser '0'", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                            else
                            {
                                if (txtIdVendedor.Text == string.Empty)
                                {
                                    res = false;
                                    XtraMessageBox.Show(this, "Seleccione el Vendedor", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                }
                                else
                                {
                                    if (txtValVenta.Text == string.Empty)
                                    {
                                        res = false;
                                        XtraMessageBox.Show(this, "El importe total de la\n" +
                                                                  "venta  no puede ser '0'", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    }
                                    else
                                    {
                                        if (txtValIgv.Text == string.Empty)
                                        {
                                            res = false;
                                            XtraMessageBox.Show(this, "El importe total de la\n" +
                                                                      "venta  no puede ser '0'", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                        }
                                        else
                                        {
                                            if (double.Parse(txtTotal.Text) == 0.0)
                                            {
                                                XtraMessageBox.Show(this, "El importe total de la\n" +
                                                                          "venta  no puede ser '0'", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                                res = false;
                                            }
                                            else
                                            {
                                                res = true;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        
            return res;
        }

        private bool VereficaCliente()
        {
            bool res = false;

            return res;
        }
        
        #endregion

        #region Operaciones Con Base de datos(GRABAR ,ELIMINAR, CONSULTAR,ACTUALIZAR,ERTC)
        private void OperacionesVenta()
        {
            // try
            // {
            txtIdCliente.Focus();
            EFacturacion obj = new EFacturacion();
            EDetFacturacion DFact = new EDetFacturacion();
            EMovientoCaja Emov = new EMovientoCaja();
            ECreditos ECred = new ECreditos();
            obj.Id_documento = int.Parse(cmbDocumento.EditValue.ToString());
            obj.Numdoc_facturacion = this.txtNroComprobante.Text;
            obj.Fecha_facturacion = DateTime.Today.Date;
            obj.Serie_facturacion = txtSerie.Text;
            obj.Imp_venta = double.Parse(txtValVenta.Text);
            obj.Imp_igv = double.Parse(txtValIgv.Text);
            obj.Imp_total = double.Parse(txtTotal.Text);
            obj.Imp_dscto = double.Parse(txtTotDsto.Text);
            obj.Impreso = "N";
            obj.Anulado = "N";
            obj.Genera_movimiento = "S";
            obj.Idusuario = "01";
            obj.Id_formapago = int.Parse(cmbFormaPago.EditValue.ToString());
            obj.Id_moneda = int.Parse(cmbMoneda.EditValue.ToString());
            obj.Id_cliente = txtIdCliente.Text;
            obj.Id_dir_cliente = id_Dicliente;
            obj.Id_sucursal = 1;
            obj.Id_estado = 1;
            obj.Id_vendedor = txtIdVendedor.Text;
            obj.Id_igv = 1;
            obj.Id_tipocambio = 1;
            obj.Id_operacion = "01";
            obj.Id_tranzaccion = "20";
            obj.Id_Condicion_venta = int.Parse(cmbTipVenta.EditValue.ToString());
            DFact.dtbDetelle = TblDetalle;
            SeleccionarVisorVenta();
            frmVisorVentasCreditos f = new frmVisorVentasCreditos(DatVisor);
            f.ShowDialog();
            if (f.opSave == 1)
            {
                if (f.op_tip_venta == 0)//moviento de caja si es una venta al contado
                {
                    obj.op4 = 2;//si la venta es al contado
                    Emov.Id_movimiento = 0;
                    Emov.Serie = f.CabMov[7].ToString();
                    Emov.Nro_comprobante = f.CabMov[8].ToString();
                    Emov.Id_caja_destino = int.Parse(f.CabMov[10].ToString());
                    Emov.Doc_referencia = f.CabMov[9].ToString();
                    Emov.Importe_mora = 0;
                    Emov.Imp_movimiento = double.Parse(f.CabMov[2].ToString());
                    Emov.Glosa = "MOVIENTO DE CAJA POR VENTAS AL CONTADO";
                    Emov.Desacargo = "N";
                    Emov.Imp_recibido = double.Parse(f.CabMov[4].ToString());
                    Emov.Imp_vuelto = double.Parse(f.CabMov[3].ToString());
                    Emov.Idusuario = "";
                    Emov.Id_sucursal_mov = 1;
                    Emov.Id_cobrador = f.CabMov[11].ToString();
                    Emov.Id_tranzaccion_mov = "20";
                    Emov.Fecha_mov = DateTime.Parse(txtFecha.EditValue.ToString()).Date;
                    Emov.Id_estado = 1;
                    Emov.Nro_operacion = "";
                    Emov.Id_documento_mov = int.Parse(f.CabMov[6].ToString());
                    ECred.Id_credito = f.CabMov[12].ToString().Length > 0 ? f.CabMov[12].ToString() : "";
                    ECred.Id_sucursal_credito =f.CabMov[13].ToString().Length>0?int.Parse(f.CabMov[13].ToString()):0;
                    obj.op1 = f.op_anticipo;
                }
                else
                {
                    obj.op4 = 1;//SI ES UNA VENTA AL CREDITO enviamos los datos de la cabecera
                    ECred.Id_credito = "";
                    ECred.Id_prodcredito = int.Parse(f.CabMov[2].ToString());
                    ECred.Imp_recargo = 0;
                    ECred.Imp_amortizacion = double.Parse(f.CabMov[1].ToString());
                    ECred.Imp_cuota = double.Parse(f.CabMov[13].ToString()) + double.Parse(f.CabMov[12].ToString());
                    ECred.Imp_cuotacapital = double.Parse(f.CabMov[13].ToString());
                    ECred.Imp_interes = double.Parse(f.CabMov[3].ToString());//tasa de interes
                    ECred.Nro_cuotas = int.Parse(f.CabMov[2].ToString());
                    ECred.Intervalo_cuota = int.Parse(f.CabMov[4].ToString());
                    ECred.Mese_pago_interes = int.Parse(f.CabMov[5].ToString());
                    ECred.Id_estado = 1;
                    ECred.Facturado = "S";
                    ECred.Id_anticipo = null;
                    ECred.Id_sucursal_credito = 1;
                    ECred.Imp_credito = double.Parse(f.CabMov[0].ToString());
                    ECred.Idusuario = "";
                    ECred.Id_credito = f.CabMov[27].ToString();
                    ECred.Id_sucursal_credito = int.Parse(f.CabMov[28].ToString());
                    obj.op1 = f.op_anticipo;
                    ECred.Cuotas = f.dtbCuota;

                    Emov.Id_movimiento = 0;
                    Emov.Serie = f.CabMov[22].ToString();
                    Emov.Nro_comprobante = f.CabMov[23].ToString();
                    Emov.Id_caja_destino = f.CabMov[25].ToString().Length > 0 ? int.Parse(f.CabMov[25].ToString()) : 0 ;
                    Emov.Doc_referencia = f.CabMov[24].ToString();
                    Emov.Importe_mora = 0;
                    Emov.Imp_movimiento = double.Parse(f.CabMov[17].ToString());
                    Emov.Glosa = "MOVIENTO DE CAJA POR VENTAS AL CONTADO";
                    Emov.Desacargo = "N";
                    Emov.Imp_recibido = double.Parse(f.CabMov[19].ToString());
                    Emov.Imp_vuelto = double.Parse(f.CabMov[18].ToString());
                    Emov.Idusuario = "";
                    Emov.Id_sucursal_mov = 1;
                    Emov.Id_cobrador = f.CabMov[26].ToString();
                    Emov.Id_tranzaccion_mov = "20";
                    Emov.Fecha_mov = DateTime.Parse(txtFecha.EditValue.ToString()).Date;
                    Emov.Id_estado = 1;
                    Emov.Nro_operacion = "";
                    Emov.Id_documento_mov = int.Parse(f.CabMov[21].ToString());
                }
            }
            else
            {
                return;
            }
            // obj.Id_sucursal_ref    ,
            // obj.Id_documento_ref   ,
            // obj.Sere_facturacion_ref,
            // obj.Numdoc_factura_ref  ,
            //  obj.Id_tranzaccion_ref  ,
            //   obj.Fecha_factura_ref   

            object[] Msg = System2012.SystemUtils.RecordManagerFacturacion.MantenimientoGrabarFacturacion(obj, DFact, Emov, ECred, this.operacion == 0 ? EnumOperaciones.Insertar : EnumOperaciones.Actualizar);
            if (obj.opRet == 1)
            {
                this.Habilitar(false);
                this.InabilitColumns(false);
            }
            //MessageBox.Show(this, Msg[0] + "");
            if (Msg[0].ToString() == "0")
            {
                XtraMessageBox.Show(this, "PROCESO EFECTUADO CON EXITO", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Information);
                HabilitaButtons(false, false);
            }
            else
            {
                if (Msg[0].ToString() == "F-1")
                {
                    XtraMessageBox.Show(this, "INCONSITENCIA INESPERADA INTENTE NUEVAMENTE", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    if (Msg[0].ToString() == "F-0")
                    {
                        XtraMessageBox.Show(this, "INCONSITENCIA INESPERADA INTENTE NUEVAMENTE", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                    else
                    {
                        if (Msg[0].ToString() == "F-1")
                        {
                            XtraMessageBox.Show(this, "INCONSITENCIA INESPERADA INTENTE NUEVAMENTE", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        }
                        else
                        {
                            if (Msg[0].ToString() == "F-2")
                            {
                                XtraMessageBox.Show(this, "SELECCIONE EL VENDEDOR CORRECTAMENTE", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            }
                            else
                            {
                                if (Msg[0].ToString() == "F-3")
                                {
                                    XtraMessageBox.Show(this, "SELECCIONE EL CLIENTE CORRECTAMENTE", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                }
                                else
                                {
                                    if (Msg[0].ToString() == "F-4")
                                    {
                                        XtraMessageBox.Show(this, "VERIFIQUE QUE EL DOCMENTO NO ESTE REGISTRADO\n(TIPO.DOC->SERIE->NUMERO)", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                    }
                                    else
                                    {
                                        if (Msg[0].ToString() == "DF-0")
                                        {
                                            XtraMessageBox.Show(this, "VERIFIQUE QUE EL INGRESO DE DATOS ESTE CORRECTAMENTE", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                        }
                                        else
                                        {
                                            if (Msg[0].ToString() == "DF-1")
                                            {
                                                XtraMessageBox.Show(this, "INCONSISTECIA INESPERADA AL MOMENTO \n" +
                                                                          "DE GRABAR EL DETALLE DEL DOCUMENTO", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                            }
                                            else
                                            {
                                                if (Msg[0].ToString() == "DF-2")
                                                {
                                                    XtraMessageBox.Show(this, "SELECCIONE CORRECTAMENTE LOS ITEMS \n" +
                                                                              "DEL DEL DETALLE DE LA VENTA", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                                }
                                                else
                                                {
                                                    if (Msg[0].ToString() == "DF-3")
                                                    {
                                                        XtraMessageBox.Show(this, "NO SE HA EFECTUADO NINGUN PROCESO\n " +
                                                                                  "VEREFIQUE EL NRO.SERIE Y NRO.DOCUMENTO NO ESTEN REGISTRADOS", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                                    }
                                                    else
                                                    {
                                                        XtraMessageBox.Show(this, Msg[0].ToString(), "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                                        /* if (Msg[0].ToString() == "F-4")
                                                        {
                                                        XtraMessageBox.Show(this, "VERIFIQUE QUE EL DOCMENTO NO ESTE REGISTRADO\n(TIPO.DOC->SERIE->NUMERO)", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                                        }
                                                        else
                                                        {
                                                        }*/
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            /*}
            catch (Exception ex)
            {
            System2012.SystemUtils.AlerMessaje(ex.Message);
            }*/
        }
       
        private void SeleccionarVisorVenta()
        {
            object getTipventa = this.cmbTipVenta.EditValue;
            DatVisor = new ArrayList();
            DatVisor.Add(getTipventa);///0
            DatVisor.Add(txtTotal.Text);//1
            DatVisor.Add(txtIdCliente.Text);//2
            DatVisor.Add(id_Dicliente);//3
            DatVisor.Add(cmbDocumento.EditValue);//4
            DatVisor.Add(txtCliente.Text);//5
            DatVisor.Add(txtDocCliente.Text);//6
            DatVisor.Add(txtDireccion.Text);//7
        }

        private void GrabarVenta()
        {
            LostFocusTotals();
            if (this.ValidarNroComprobante())
            {
                if (ValidarDatos() == true)
                {
                    if (ValidForm() == true)
                    {
                        if (this.TblDetalle.Rows.Count > 0)
                        {
                            if (this.VerificarCantidadDetalle())
                            {
                                OperacionesVenta();
                            }
                            else
                            {
                                XtraMessageBox.Show(this, "Una de las cantidades del detalle del pedido de venta es '0'\n verifique que este correctamente ingresados", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                        }
                        else
                        {
                            XtraMessageBox.Show(this, "Para registrar un pedido de venta debe cargar al menos un detalle\ny asegurarse de que el importe de los productos no sean '0'.", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                }
            }
            else
            {
                XtraMessageBox.Show(this, "Ingrese Correctamen Serie y Nro de Comprobante", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.txtSerie.Focus();
            }
        }

        private void LostFocusTotals()
        {
            this.gridView1.FocusedRowHandle = this.TblDetalle.Rows.Count - 1;
            this.gridView1.FocusedColumn = this.gridView1.Columns["Item"];
            txtSerie.Focus();
            CalCularTotales();
        }

        #endregion

        #region Busquedas
        private void SeleccionarVendedor()
        {
            Listados.frmListadoPersona f = new Listados.frmListadoPersona();
            f.ShowDialog();
            txtIdVendedor.Text = f.idPer;
            txtVendedor.Text = f.full_name;
        }

        private void FiendDocument()
        {
            ArrayList Data = new ArrayList();
            Data.Add(this.txtIdCliente.Text);
            Data.Add(txtCliente.Text);
            Data.Add(txtDireccion.Text);
            Data.Add(txtDocCliente.Text);
            Listados.frmListVentasClientes f = new System2012.Listados.frmListVentasClientes(Data);
            f.MaximizeBox = false;
            f.MinimizeBox = false;
            f.ShowDialog();
            if (f.dtbCabFact.Rows.Count > 0)
            {
                 getDataCabDocument(f.Row,f.dtbCabFact);
            }
        }
        private void getDataCabDocument(int i,DataTable cab)
        {
            txtSerie.Text = cab.Rows[i]["serie_facturacion"].ToString();
            txtNroComprobante.Text = cab.Rows[i]["numdoc_facturacion"].ToString();
            txtCliente.Text = cab.Rows[i]["cliente"].ToString();
            txtDireccion.Text = cab.Rows[i]["dir_cliente"].ToString();
            txtDocCliente.Text = cab.Rows[i]["doc_cliente"].ToString();
            txtIdCliente.Text = cab.Rows[i]["id_cliente"].ToString();
            txtIdVendedor.Text = cab.Rows[i]["id_vendedor"].ToString();
            txtVendedor.Text = cab.Rows[i]["vendedor"].ToString();
            cmbDocumento.EditValue = cab.Rows[i]["id_documento"];
            cmbTipVenta.EditValue = cab.Rows[i]["id_condicion_venta"];
            cmbFormaPago.EditValue = cab.Rows[i]["id_formapago"];
            cmbMoneda.EditValue = cab.Rows[i]["id_moneda"];
            cmbOperacion.EditValue = cab.Rows[i]["id_operacion"];
            txtFecha.EditValue =Convert.ToDateTime(cab.Rows[i]["fecha_facturacion"]);
            getDetailsDocument(i, cab);
            HabilitaButtons(false,true);

        }
        private void getDetailsDocument(int Row,DataTable cab)
        {
            ESistema obj = new ESistema();
            StringBuilder cadena = new StringBuilder();
            if (Row >= 0)
            {
                cadena.AppendFormat(" where serie_facturacion ='{0}'", cab.Rows[Row]["serie_facturacion"]);
                cadena.AppendFormat("and numdoc_facturacion='{0}'", cab.Rows[Row]["numdoc_facturacion"]);
                cadena.AppendFormat("and id_sucursal={0}", cab.Rows[Row]["id_sucursal"]);
                cadena.AppendFormat("and id_documento={0}", cab.Rows[Row]["id_documento"]);
                cadena.AppendFormat("and id_dir_cliente={0}", cab.Rows[Row]["id_dir_cliente"]);
                cadena.AppendFormat("and id_cliente='{0}'", cab.Rows[Row]["id_cliente"]);
                cadena.AppendFormat("and fecha_facturacion ='{0}'", cab.Rows[Row]["fecha_facturacion"]);
                obj.Condicion = cadena.ToString();
                DataTable dtbDet = System2012.SystemUtils.RecordManagerFacturacion.GetDetaFacturacionVentas(obj);
                TblDetalle.Clear();
                foreach (DataRow row in dtbDet.Rows)
                {
                    DataRow r = this.TblDetalle.NewRow();
                    r["Codigo"] = row["id_producto"];
                    r["Lote"] = row["id_lote"];
                    r["Alm"] = row["id_almacen"];
                    r["Descripcion"] = row["descripcion_larga"];
                    r["Und"] = row["unimed"];
                    r["Stock"] = 0;
                    r["Cantidad"] = row["cantidad"];
                    r["Lista"] = row["lista"];
                    r["Precio"] = row["imp_precio"];
                    r["Dscto"] = row["porcent_dscto"];
                    r["Subtotal"] = row["valor_venta"];
                    r["IGV"] = row["valor_igv"];
                    r["Total"] = row["imp_total"];
                    r["porcent_IGV"] = row["porcent_igv"];
                    r["Imp_Bruto"] = row["Imp_Bruto"];
                    r["val_unidad"] = row["val_unidad"];
                    r["val_min"] = row["val_minimo"];
                    r["id_precios"] = row["id_precios"];
                    r["id_unidad"] = row["id_unidad"];
                    r["id_lista"] = row["id_lista"];
                    r["inc_serie"] = row["inc_serie"];
                    r["puntos"] = 0;
                    r["controla_stock"] = row["controla_stock"];
                    //r["st"] = row[""];
                    TblDetalle.Rows.Add(r);
                }
            }
            CalCularTotales();
        }
        #endregion

        #region Gestion de Plantillas
        private void getPlantilla()
        {
            if (cmbDocumento.EditValue != null)
            {
                ESistema obj = new ESistema();
                StringBuilder cadena = new StringBuilder();
                cadena.Append("where id_tranzaccion='");
                cadena.Append(20 + "' and ");
                cadena.Append(" id_documento=");
                cadena.Append(cmbDocumento.EditValue + "");
                obj.Condicion = cadena.ToString();
                DataTable dtb = System2012.SystemUtils.RecordManagerCommonList.GetListaSeriesDocumento(obj);
                if (dtb.Rows.Count > 0)
                {
                    PLANTILLA = dtb.Rows[0]["plantilla"].ToString();
                    IMPRESORA = dtb.Rows[0]["impresora"].ToString();
                    txtSerie.Text = dtb.Rows[0]["serie"].ToString();
                    getCorrelativo();
                }
                else
                {
                    txtSerie.Text = null;
                    PLANTILLA = null;
                    IMPRESORA = null;
                }
            }
        }

        private void getCorrelativo()
        {
            ESeriesDocumento Es = new ESeriesDocumento();
            Es.Id_Tranzaccion = "20";
            Es.Id_Documento = int.Parse(cmbDocumento.EditValue.ToString());
            Es.Serie = txtSerie.Text;
            Es.Id_Sucursal = 1;
            string correlativo = System2012.SystemUtils.CommonMaintenanceList.getCorrelativo(Es);
            txtNroComprobante.Text = correlativo.PadLeft(7, '0');
        }

        #endregion
        #region Consultas

        #endregion
        private void frmFacturacion_Load(object sender, EventArgs e)
        {
            this.CabeceraDetalle();
            this.gridControl1.DataSource = this.TblDetalle;
            /* if (!this.BGWTipDoc.IsBusy)
            {
            this.BGWTipDoc.RunWorkerAsync();
            }*/
            DatVisor = new ArrayList();
            txtFecha.EditValue = DateTime.Today.Date;
        }

        private void barButtonItem2_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            this.AddDetalle();
        }

        private void barButtonItem6_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            //MessageBox.Show(this, TblDetalle.Rows.Count + "");
            this.QuitarItem();
        }

        private void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {
            //http://www.devexpress.com/Support/Center/p/Q200064.aspx
            GridView view = sender as GridView;
            
            if (e.Column.FieldName == "Codigo")
            {
                string codProd = e.Value.ToString();
                if (!this.validaCodigoProducto(codProd))
                {
                    this.AgregarDatosLista(sender, e.RowHandle);
                }
            }
            if (e.Column.FieldName == "Alm")
            {
                string codAlm = e.Value.ToString();
                string idprod = view.GetRowCellValue(e.RowHandle, "Codigo").ToString();
                if (!this.ValidaAlmacen(codAlm, idprod))
                {
                    this.AgregarAlmacen(sender, e.RowHandle);
                }
            }
            if (e.Column.FieldName == "Cantidad")
            {
                double val_cant = double.Parse(view.GetRowCellValue(e.RowHandle, "Cantidad").ToString());
                string codAlm = view.GetRowCellValue(e.RowHandle, "Alm").ToString();
                string idprod = view.GetRowCellValue(e.RowHandle, "Codigo").ToString();
                if (val_cant > 0)
                {
                    if (this.op_det == 1)
                    {
                        double val_minimo = double.Parse(view.GetRowCellValue(e.RowHandle, "val_min").ToString());
                        double val_unidad = double.Parse(view.GetRowCellValue(e.RowHandle, "val_unidad").ToString());
                        double val_stock = double.Parse(view.GetRowCellValue(e.RowHandle, "Stock").ToString());//variable Temportal
                        if (val_unidad > 0)
                        {
                            if (val_cant >= (val_minimo / val_unidad))
                            {
                                if (val_cant <= this.Stok(codAlm, idprod))
                                {
                                    this.CalCularPrecios(sender, e.RowHandle);
                                    this.SeccionarSerie(idprod);
                                }
                                else
                                {
                                    XtraMessageBox.Show(this, "STOCK INSUFICIENTE \n\t\n La Cantidad Sobre pasa el stock", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    view.SetRowCellValue(e.RowHandle, "Cantidad", 0.0);
                                }
                            }
                            else
                            {
                                XtraMessageBox.Show(this, string.Format("Cantidad es menor que la unidad minima\n  Cantidad{0}", val_cant * val_unidad), "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                        }
                        else
                        {
                            XtraMessageBox.Show(this, "El valor de la unidad es menor a cero", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            view.SetRowCellValue(e.RowHandle, "Cantidad", 0.0);
                        }
                    }
                }
            }
            if (e.Column.FieldName == "Precio")
            {
                if (this.op_det == 1)
                {
                    this.CalCularPrecios(sender, e.RowHandle);
                }
            }
            if (e.Column.FieldName == "Dscto")
            {
                if (this.op_det == 1)
                {
                    this.CalCularPrecios(sender, e.RowHandle);
                }
            }
            if (e.Column.FieldName == "Total")
            {
                if (this.op_det == 2)
                {
                    this.CalCularPrecios(sender, e.RowHandle);
                }
            }
            if (e.Column.FieldName == "Lista")
            {
                int lista = int.Parse(view.GetRowCellValue(e.RowHandle, "Lista").ToString());
                //validamos que la lista de precios acepte valores entre 1 y 5
                if (lista > 0 && lista <= 5)
                {
                    //obtenemos los valores de la lista de precios
                    this.getPrecios(lista);
                }
                else
                { // si los valores no esta en el rango asignamos la lista de preciios por defecto 
                    //configurada en parametros de datos iniciales del sistema
                    XtraMessageBox.Show(this, "Lista de precios Invalida", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    this.gridView1.SetRowCellValue(e.RowHandle, "Lista", 1);
                }
            }
        }

        private void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            this.indexRow = e.FocusedRowHandle;
            string col = this.gridView1.Columns["Cantidad"].FieldName;
            if (col == "Cantidad")
            {
                //  MessageBox.Show(this, col);
            }
            //for (int i = 0; i <     this.gridView1.Columns.Count-1; i++)
            //  {
            /* string col = gridView1.Columns[""].FieldName;
            if (col == "Cantidad")
            {
            MessageBox.Show(this, col);
            }*/
        }

        private void gridView1_FocusedColumnChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedColumnChangedEventArgs e)
        {
            if (e.FocusedColumn == this.gridView1.Columns["Cantidad"])
            {
                this.op_det = 1;
            }
            if (e.FocusedColumn == this.gridView1.Columns["Precio"])
            {
                this.op_det = 1;
            }
            if (e.FocusedColumn == this.gridView1.Columns["Dscto"])
            {
                this.op_det = 1;
            }
            if (e.FocusedColumn == this.gridView1.Columns["Total"])
            {
                this.op_det = 2;
            }
        }

        private void gridView1_InitNewRow(object sender, InitNewRowEventArgs e)
        {
            GridView view = sender as GridView;
            view.SetRowCellValue(e.RowHandle, "Dscto", 0.00);
            view.SetRowCellValue(e.RowHandle, "Cantidad", 0.00);
            view.SetRowCellValue(e.RowHandle, "val_min", 0.00);
            view.SetRowCellValue(e.RowHandle, "val_unidad", 0.00);
            view.SetRowCellValue(e.RowHandle, "Stock", 0.00);
            view.SetRowCellValue(e.RowHandle, "Total", 0.00);
            view.SetRowCellValue(e.RowHandle, "Precio", 0.00);
            view.SetRowCellValue(e.RowHandle, "Subtotal", 0.00);
            view.SetRowCellValue(e.RowHandle, "porcent_IGV", 0.00);
            view.SetRowCellValue(e.RowHandle, "IGV", 0.00);
            view.SetRowCellValue(e.RowHandle, "costo_alm", 0.00);
            view.SetRowCellValue(e.RowHandle, "cant_edita", 0.00);
            view.SetRowCellValue(e.RowHandle, "puntos", 0.00);
            view.SetRowCellValue(e.RowHandle, "st", -1);

            view.SetRowCellValue(e.RowHandle, "id_unidad", -1);
            view.SetRowCellValue(e.RowHandle, "id_lista", -1);
            view.SetRowCellValue(e.RowHandle, "id_precios", -1);
            view.SetRowCellValue(e.RowHandle, "Imp_Bruto", 0);
            /*DataRow r = this.TblDetalle.NewRow();
            this.TblDetalle.Rows.Add(r);*/

            this.CalCularTotales();
            //    DataRow r;
            // r = TblDetalle.NewRow();
            //  TblDetalle.Rows.Add(r);
            ///gridControl1.DataSource = TblDetalle;
            //item = item + 1;
        }

        BaseEdit txtEditor;
        private void gridView1_ShownEditor(object sender, EventArgs e)
        {
            if (this.gridView1.FocusedColumn.FieldName == "Alm")// & gridView1.FocusedColumn.OptionsColumn.AllowEdit)
            {
                this.txtEditor = ((GridView)sender).ActiveEditor;
                this.txtEditor.DoubleClick += almEditor_DoubleClick;
            }
            if (this.gridView1.FocusedColumn.FieldName == "Und")// & gridView1.FocusedColumn.OptionsColumn.AllowEdit)
            {
                this.txtEditor = ((GridView)sender).ActiveEditor;
                this.txtEditor.DoubleClick += unimedEditor_DoubleClick;
            }
        }
      
        private void almEditor_DoubleClick(object sender, EventArgs e)
        {
            ArrayList Data = new ArrayList();
            if (this.gridView1.GetRowCellValue(this.indexRow, "Codigo") != null)
            {
                Data.Add(this.gridView1.GetRowCellValue(this.indexRow, "Alm").ToString());
                Data.Add(this.gridView1.GetRowCellValue(this.indexRow, "Codigo").ToString());
                Listados.frmListarAlmacen f = new System2012.Listados.frmListarAlmacen(Data);
                f.ShowDialog();
                GridView view = sender as GridView;
                if (f.data != null)
                {
                    if (f.data.Count > 0)
                    {
                        if (f.data[0] != null)
                        {
                            this.txtEditor.Text = f.data[0].ToString();
                            this.gridView1.SetRowCellValue(this.indexRow, "Stock", f.data[1]);
                        }
                    }
                }
            }
            else
            {
                XtraMessageBox.Show(this, "SELECCIONE UN PRODUCTO PARA REALIZAR ESTE PROCESO", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void unimedEditor_DoubleClick(object sender, EventArgs e)
        {
            ArrayList Data = new ArrayList();
            if (this.gridView1.GetRowCellValue(this.indexRow, "Codigo") != null)
            {
                Data.Add(this.gridView1.GetRowCellValue(this.indexRow, "Codigo").ToString());
                Listados.frmListadoUnimedLP f = new Listados.frmListadoUnimedLP(Data);
                f.ShowDialog();

                if (f.data != null)
                {
                    if (f.data.Count > 0)
                    {
                        if (f.data[0] != null)
                        {
                            this.txtEditor.Text = f.data[3].ToString();
                            this.gridView1.SetRowCellValue(this.indexRow, "id_unidad", f.data[0]);
                            this.gridView1.SetRowCellValue(this.indexRow, "id_lista", f.data[1]);
                            this.gridView1.SetRowCellValue(this.indexRow, "id_precios", f.data[2]);
                        }
                    }
                }
            }
            else
            {
                XtraMessageBox.Show(this, "SELECCIONE UN PRODUCTO PARA REALIZAR ESTE PROCESO", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
       
        private void btnGrabar_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            this.GrabarVenta();
        }

        private void btnEliminar_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            XtraReport1 report = new XtraReport1();
            Reportes.Diseñador f = new Diseñador();
            
            ReportDesignTool dt = new ReportDesignTool(report);
            //  ReportDesignContextWin f = new ReportDesignContextWin();
            //f.CreateTool(report);
       
            // dt.DesignForm.SetWindowVisibility(DesignDockPanelType.FieldList |DesignDockPanelType.PropertyGrid, false);
            //  dt.DesignRibbonForm.DesignMdiController.SetCommandVisibility(ReportCommand.ZoomOut, DevExpress.XtraReports.UserDesigner.CommandVisibility.Verb);
            // dt.DesignRibbonForm.DesignMdiController.SetCommandVisibility(ReportCommand.ShowTabbedInterface, DevExpress.XtraReports.UserDesigner.CommandVisibility.Verb);
            //  dt.DesignRibbonForm.DesignMdiController.SetCommandVisibility(ReportCommand.ShowWindowInterface, DevExpress.XtraReports.UserDesigner.CommandVisibility.Verb);
            //Report
            // Invoke the standard End-User Designer form. 
            dt.ShowRibbonDesigner();
            // Invoke the standard End-User Designer form, modally. 
            //dt.ShowDesigner();
            //dt.ShowDesignerDialog();
        }
       
        private void BGWTipDoc_DoWork(object sender, DoWorkEventArgs e)
        {
            e.Result = System2012.SystemUtils.RecordManagerCommonList.GetDocument(2);
        }

        private void BGWTipDoc_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.cmbDocumento.Properties.DataSource = e.Result;
            if (!this.BGWTipoVenta.IsBusy)
            {
                this.BGWTipoVenta.RunWorkerAsync();
                cmbDocumento.EditValue = 44;
            }
        }

        private void BGWTipoVenta_DoWork(object sender, DoWorkEventArgs e)
        {
            e.Result = e.Result = System2012.SystemUtils.RecordManagerCommonList.GetFormaPago("V");
        }

        private void BGWTipoVenta_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.cmbTipVenta.Properties.DataSource = e.Result;
            if (!this.BGWMoneda.IsBusy)
            {
                cmbTipVenta.EditValue = 21;
                this.BGWMoneda.RunWorkerAsync();
            }
        }

        private void BGWMoneda_DoWork(object sender, DoWorkEventArgs e)
        {
            e.Result = System2012.SystemUtils.RecordManagerCommonList.GetMoneda();
        }

        private void BGWMoneda_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.cmbMoneda.Properties.DataSource = e.Result;
            if (!this.BGWFormaPago.IsBusy)
            {
                cmbMoneda.EditValue = 1;
                this.BGWFormaPago.RunWorkerAsync();
            }
        }

        private void BGWFormaPago_DoWork(object sender, DoWorkEventArgs e)
        {
            e.Result = System2012.SystemUtils.RecordManagerCommonList.GetFormaPago("S");
        }

        private void BGWFormaPago_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.cmbFormaPago.Properties.DataSource = e.Result;
            if (!BGWOperacion.IsBusy)
            {
                cmbFormaPago.EditValue = 8;
                BGWOperacion.RunWorkerAsync(); 
            }
        }

        private void txtNroComprobante_Leave(object sender, EventArgs e)
        {
            string codigo = this.txtNroComprobante.Text;
            while (codigo.Length < 7)
            {
                codigo = string.Format("0{0}", codigo);
            }
            this.txtNroComprobante.Text = codigo;
        }

        private void txtNroComprobante_Enter(object sender, EventArgs e)
        {
            if (this.txtNroComprobante.Text.Length > 0)
            {
                int codigo = int.Parse(this.txtNroComprobante.Text);
                this.txtNroComprobante.Text = string.Format("{0}", codigo);
            }
        }

        private void txtSerie_Enter(object sender, EventArgs e)
        {
            if (this.txtSerie.Text.Length > 0)
            {
                int codigo = int.Parse(this.txtSerie.Text);
                this.txtSerie.Text = string.Format("{0}", codigo);
            }
        }

        private void txtSerie_Leave(object sender, EventArgs e)
        {
            string codigo = this.txtSerie.Text;
            while (codigo.Length < 4)
            {
                codigo = string.Format("0{0}", codigo);
            }
            this.txtSerie.Text = codigo;
        }

        private void txtIdVendedor_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F1)
            {
                this.SeleccionarVendedor();
            }
        }

        private void TxtIdClienteKeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F1)
            {
                this.SeleccionarCliente();
            }
        }

        void SeleccionarCliente()
        {
            Persona.BuscarPersona per = new BuscarPersona(EnumTipoPersona.Cliente);
            per.ShowDialog();
            if (per.Estado)
            {
                IEPersona cli = per.Persona;

                this.txtIdCliente.EditValue = cli.IdPersona;
                this.txtCliente.EditValue = cli.RazonSocial;
                this.txtDocCliente.EditValue = cli.NumeroDocumento;
                EDireccion dir = cli.GetAddress(per.IdAddressSelected);
                id_Dicliente = dir.Item;//
                this.txtDireccion.EditValue = dir.Direccion;
                this.txtIdUbigeo.EditValue = dir.Ubigeo;
                EUbigeo ubi = SystemUtils.RecordManagerCommonList.GetUbigeoByUbigeo(dir.Ubigeo);
                this.txtUbigeo.EditValue = ubi.ToString();
            }
            per.Dispose();
        }

        private void BGWListPersonal_DoWork(object sender, DoWorkEventArgs e)
        {
            ESistema obj = new ESistema();
            StringBuilder cadena = new StringBuilder();
            cadena.Append("where id_persona= ");
            cadena.Append("'");
            cadena.Append(txtIdVendedor.Text + "'");
            obj.Condicion = cadena.ToString();
            e.Result = System2012.SystemUtils.RecordManagerCommonList.GetListadoPersonal(obj);
        }

        private void BGWListPersonal_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            DataTable dtbPersonal = (DataTable)e.Result;
            if (dtbPersonal.Rows.Count > 0)
            {
                txtVendedor.Text = dtbPersonal.Rows[0]["fullname_persona"].ToString();
            }
            else
            {
                SeleccionarVendedor();
            }
        }

        private void txtIdVendedor_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
            {
                if (!string.IsNullOrEmpty(this.txtIdVendedor.Text))
                {
                    if (!BGWListPersonal.IsBusy)
                        BGWListPersonal.RunWorkerAsync();
                }
                else
                {
                    SeleccionarVendedor();
                }
            }
        }

        private void txtIdVendedor_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            SeleccionarVendedor();
        }

        private void BGWOperacion_DoWork(object sender, DoWorkEventArgs e)
        {
            ESistema obj = new ESistema();
            e.Result = System2012.SystemUtils.RecordManagerCommonList.GetListadoTipoOperacion(obj);
        }

        private void BGWOperacion_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            cmbOperacion.Properties.DataSource = e.Result;
            cmbOperacion.EditValue = "02";
        }

        private void BGWCliente_DoWork(object sender, DoWorkEventArgs e)
        {
            ESistema obj = new ESistema();
            StringBuilder cadena = new StringBuilder();
            cadena.Append("where id_persona= ");
            cadena.Append("'");
            cadena.Append(this.txtIdCliente.Text + "'");
            obj.Condicion = cadena.ToString();
            e.Result = System2012.SystemUtils.RecordManagerPersona.GetListaClientes(obj);
        }

        private void BGWCliente_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            DataTable dtbP = (DataTable)e.Result;
            if (dtbP.Rows.Count > 0)
            {
                this.cmbTipVenta.Focus();
                // txtVendedor.Text = dtbPersonal.Rows[0]["fullname_persona"].ToString();
            }
            else
            {
                if (this.txtIdCliente.Text != string.Empty)
                {
                    this.SeleccionarCliente();
                }
                else
                {
                    txtCliente.Focus();
                }
            }
        }

        private void txtIdCliente_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
            {
                if (this.txtIdCliente.Text != string.Empty)
                {
                    if (!BGWCliente.IsBusy)
                        BGWCliente.RunWorkerAsync();
                }
                /*else
                {
                SeleccionarCliente();
                }*/
            }
        }

        private void frmFacturacion_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F5 || (e.Control && e.KeyCode == Keys.S))
            {
                this.GrabarVenta();
            }
            if (e.KeyCode == Keys.Escape)
            {
                if (XtraMessageBox.Show(this, "Está seguro que desea Salir \n" +
                                              "Confirmación Requerida ?", "Confirmación", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                {
                    this.Close();
                }
            }
            if (e.Control && e.KeyCode == Keys.N)
            {
                NuevoDocumento();
            }
        }

        private void btnNuevo_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            NuevoDocumento();
            txtSerie.Focus();
        }

        private void cmbDocumento_CloseUp(object sender, DevExpress.XtraEditors.Controls.CloseUpEventArgs e)
        {
            // e.AcceptValue = false;
        }

        private void cmbOperacion_EditValueChanged(object sender, EventArgs e)
        {
            GetIgv();
        }

        private void layoutControlItem1_DoubleClick(object sender, EventArgs e)
        {
            ArrayList data = new ArrayList();
            data.Add("20");
            data.Add(cmbDocumento.EditValue);
            data.Add(txtSerie.Text);
            Sistema.Documentos.frmCorrelativos f = new frmCorrelativos(data);
            f.ShowDialog();
        }

        private void cmbDocumento_EditValueChanged(object sender, EventArgs e)
        {
            getPlantilla();
        }

        private void cmbDocumento_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Left || e.KeyCode == Keys.Up || e.KeyCode == Keys.Down)
            {
                getPlantilla();
            }
        }

        private DataSet getConsulta()
        {
            ESistema obj = new ESistema();
            obj.Condicion = "";
            DataTable facturacion = System2012.SystemUtils.RecordManagerFacturacion.GetCabeceraFacturacion(obj);
            DataSet dt = new DataSet();
            dt.Tables.Add(facturacion);
            return dt;
        }

        private void barButtonItem4_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            PrintingSystem ps = new PrintingSystem();
            //   string filePath = @"D:\Report1.repx"; //GetTemplate();
            // FilePath = String.Format("{0}{1}.repx", basePath, ComboBox1.Text)
            // Load the document from a file.
            // ps.LoadDocument(filePath);
            XtraReport report = new XtraReport();
            report.DataSource = getConsulta();
            report.DataMember = getConsulta().Tables[0].TableName;
            //  report.DataSourceSchema
            // report.CreateDocument();
            // Reportes.XtraReport1 frm = new XtraReport1();
            //  DetailBand detailBand = new DetailBand();
            // detailBand.Height = 50;
            //  report.Bands.Add(detailBand);

            // Add a label to the detail band.
            // XRLabel label = new XRLabel();
            // label.DataBindings.Add("Text", null, "fullname_persona");
            // detailBand.Controls.Add(label);
            report.LoadLayout(@"D:\productos.repx");
            // Add a detail band to the report.

            //   PrintingSystem ps = new PrintingSystem();

            ////   string filePath = @"D:\Report1.repx"; //GetTemplate();
            //    // FilePath = String.Format("{0}{1}.repx", basePath, ComboBox1.Text)
            //   // Load the document from a file.
            //  // ps.LoadDocument(filePath);
            //   XtraReport report = new XtraReport();
            //   report.DataSource = getConsulta();
            //   report.DataMember = getConsulta().Tables[0].TableName;

            report.ShowPreview();
            // Create an instance of the preview dialog.
            //  PrintPreviewFormEx preview = new PrintPreviewFormEx();
            // Load the report document into it.
            // preview.PrintingSystem = ps;
            // Show the preview dialog.
            // preview.ShowDialog();
        }

        public static Stream GetTemplate()
        {
            return System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(@"D:\Report1.repx");
        }

        private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            getConsulta().WriteXml(@"D:\Facturacion.xml");
            //  System2012.Almacen.DemoReporteProducto rpt = new System2012.Almacen.DemoReporteProducto();
            //  List<EProducto> p = SystemUtils.RecodManajerproducto.GetProductos();
            XtraReport report = new XtraReport();
            ESistema obj = new ESistema();
            obj.Condicion = "";
            DataTable facturacion = System2012.SystemUtils.RecordManagerFacturacion.GetCabeceraFacturacion(obj);
            report.DataSource = facturacion;
            report.LoadLayout(@"D:\pnlFacturacion.repx");
            report.ShowPreview();
        }

        private void txtSerie_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
            {
                getCorrelativo();
            }
        }

        private void txtNroComprobante_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
            {
                getCorrelativo();
            }
        }

        private void cmbDocumento_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
            {
                getCorrelativo();
            }
        }

        private void btnSalir_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            this.Close();
        }

        private void txtNroComprobante_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F1)
            {
                FiendDocument();
            }
        }

        private void txtNroComprobante_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            FiendDocument();
        }

        private void barButtonItem1_ItemClick_1(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
        }
    }
}